export 'notificatioin_model.dart';
import 'notificatioin_model.dart';


class NotificationCenter {
  // 单例
  static final NotificationCenter _instance = NotificationCenter._internal();

  factory NotificationCenter() => _instance;

  // 私有的命名构造函数
  NotificationCenter._internal();

  //创建通知中心
  List<NotificationModel> pool = [];

  //添加监听者方法（加入通知中心）
  void addObserver(
      String postName, dynamic key, void Function(dynamic value) notification) {
    NotificationModel model = NotificationModel.fromList([postName, key, notification]);
    pool.add(model);
  }

  //发送通知
  void postNotification(String postName, dynamic value) {
    /// 遍历拿到对应的通知，并执行
    for (var element in pool) {
      if (element.postName == postName) {
        element.notification(value);
      }
    }
  }

  /// 根据postName移除通知
  void removeOfName(String postName) {
    /// 线程安全，不可使用forEach执行添加、移除等操作
    pool.removeWhere((element) => element.postName == postName);
  }

  /// 根据key移除通知
  void removeOfKey(dynamic key) {
    pool.removeWhere((element) => element.key == key);
  }

  /// 清空通知中心
  void removeAll() {
    pool.clear();
  }
}


